Skip to content

use Distribution node#15822

Merged
trask merged 20 commits intoopen-telemetry:mainfrom
zeitlinger:distribution-node
Feb 23, 2026
Merged

use Distribution node#15822
trask merged 20 commits intoopen-telemetry:mainfrom
zeitlinger:distribution-node

Conversation

@zeitlinger
Copy link
Copy Markdown
Member

@zeitlinger zeitlinger commented Jan 10, 2026

Fixes #15796

@zeitlinger zeitlinger self-assigned this Jan 10, 2026
@github-actions github-actions Bot added the test native This label can be applied to PRs to trigger them to run native tests label Jan 10, 2026
@zeitlinger zeitlinger marked this pull request as ready for review January 12, 2026 16:09
@zeitlinger zeitlinger requested a review from a team as a code owner January 12, 2026 16:09
@zeitlinger zeitlinger moved this from In Progress to Awaiting Review in Declarative Configuration: Java Jan 12, 2026
@zeitlinger
Copy link
Copy Markdown
Member Author

@trask please have a look

@zeitlinger zeitlinger force-pushed the distribution-node branch 2 times, most recently from ac6a83f to 62c977d Compare January 22, 2026 10:47
@zeitlinger
Copy link
Copy Markdown
Member Author

@trask please have another look

@zeitlinger
Copy link
Copy Markdown
Member Author

@trask please check again

@jack-berg
Copy link
Copy Markdown
Member

Blocked by #16087

@zeitlinger
Copy link
Copy Markdown
Member Author

zeitlinger commented Feb 13, 2026

Punted runtime telemetry related changes to unblock this PR by not needing #16087

Addressed in latest commit:

  • EnabledInstrumentations removed (comment, comment, comment): Removed the EnabledInstrumentations interface entirely. InstrumentationPropertyEnabled and LogbackAppenderInstaller now call EarlyConfig.isInstrumentationEnabled() directly. AgentDistributionConfig exposes isInstrumentationEnabled() helpers directly without needing the abstraction.

  • RuntimeMetricsConfigUtil simplified (comment, comment): No longer passes EnabledInstrumentations — takes boolean defaultEnabled instead. The distro-level decision is made in the caller (javaagent installer or Spring auto-config), not in the library instrumentation.

  • AgentConfig removed: Replaced AgentConfig.instrumentationMode() with AgentDistributionConfig.get().isInstrumentationDefaultEnabled() in all runtime telemetry and oshi installers. No more string-based "default"/"none" comparison.

Comment thread javaagent-tooling/src/testDistributionConfig/resources/distribution-config.yaml Outdated
@zeitlinger
Copy link
Copy Markdown
Member Author

@trask hope it makes sense now 😄

…based instrumentation matching

- Replace FAIL_ON_UNKNOWN_PROPERTIES with DeserializationProblemHandler that logs
  warnings for unknown distribution.javaagent properties
- Revert isInstrumentationEnabled to single-loop order-based matching (first name
  wins), consistent with ConfigProperties behavior

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
…ingle-arg overload

- Initialize INSTANCE to null, throw on early access or double-init
- Add isInstrumentationEnabled(String) overload using default enabled
- Update comments to "Only used by tests"
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
During Gradle byteBuddyJava builds, InstrumentationModule subclasses are
loaded which triggers AgentDistributionConfig.get() before set() is called.
Instead of always throwing, return defaults when outside agent context.

AgentInstaller calls expectInitialization() early in bootstrap so that
get() still throws at runtime if set() was missed (catches ordering bugs).
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
…fig has no distribution node

When declarative config is used but the YAML has no distribution.javaagent
node, JavaagentDistributionAccessCustomizerProvider never calls set().
Add setIfAbsent() fallback in OpenTelemetryInstaller to handle this case.
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
zeitlinger and others added 3 commits February 20, 2026 19:48
…efault config in customizer provider

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Environment.getProperty(key, List.class) does not reassemble indexed
properties (e.g. enabled[0]=spring_web). Switch to Spring Boot's Binder
API which handles both indexed and comma-separated list formats.
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
@trask trask force-pushed the distribution-node branch from 73bd849 to 17b2e9c Compare February 20, 2026 22:53
# Conflicts:
#	declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates declarative configuration to use the distribution node (e.g., distribution.javaagent.instrumentation) for enabling/disabling instrumentations, aligning javaagent and Spring starter behavior with the configuration model described in #15796.

Changes:

  • Introduce AgentDistributionConfig and wiring to read distribution.javaagent from declarative config (or fall back to ConfigProperties for non-declarative config).
  • Migrate javaagent and Spring starter “default enabled / enabled / disabled” logic from legacy nodes to distribution.*.
  • Update smoke tests, Spring starter tests, and add a dedicated javaagent distribution-config test suite + fixture YAML.

Reviewed changes

Copilot reviewed 33 out of 33 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
smoke-tests/src/test/resources/declarative-config.yaml Switch smoke-test declarative config from legacy instrumentation node to distribution.javaagent.instrumentation.
smoke-tests/src/test/java/io/opentelemetry/smoketest/DeclarativeConfigurationSmokeTest.java Update test comment to reflect default_enabled=false behavior.
javaagent-tooling/src/testDistributionConfig/resources/distribution-config.yaml Add fixture YAML covering distribution.javaagent properties (indy, excludes, instrumentation lists).
javaagent-tooling/src/testDistributionConfig/java/io/opentelemetry/javaagent/extension/instrumentation/internal/AgentDistributionConfigTest.java New tests asserting distribution.javaagent parsing and instrumentation enable/disable semantics.
javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstallerTest.java Update tests to use AgentDistributionConfig instead of GlobalOpenTelemetry/declarative config bridge.
javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java Reset AgentDistributionConfig in test lifecycle to avoid global state leakage across tests.
javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java Reset AgentDistributionConfig in test lifecycle.
javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.java Reset AgentDistributionConfig in test lifecycle.
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java Use AgentDistributionConfig for module enable/disable decisions; remove legacy helper.
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java Source excluded classes from AgentDistributionConfig instead of declarative config API.
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java Source excluded classloaders from AgentDistributionConfig instead of declarative config API.
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java Replace declarative-config-based test toggle with a direct system property toggle.
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/JavaagentDistributionAccessCustomizerProvider.java New customizer provider that reads distribution.javaagent and initializes AgentDistributionConfig.
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java Remove legacy instrumentation_mode accessor tied to deprecated config shape.
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java Initialize AgentDistributionConfig from ConfigProperties for non-declarative config usage.
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java Use AgentDistributionConfig for force-synchronous-agent-listeners decision.
javaagent-tooling/build.gradle.kts Add jackson-databind runtime dependency + add testDistributionConfig suite and wire into check.
javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/internal/AgentDistributionConfig.java New internal holder for distribution.javaagent config (indy, excludes, instrumentation lists, defaults).
javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java Drive defaults and indy enablement from AgentDistributionConfig instead of legacy declarative config nodes.
javaagent-extension-api/build.gradle.kts Add compileOnly dependency for jackson annotations used by AgentDistributionConfig.
instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java Update Spring starter declarative-config tests to use otel.distribution.spring_starter.instrumentation.*.
instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java8RuntimeMetricsAutoConfiguration.java Remove legacy spring_starter instrumentation_mode parsing; rely on enablement condition + runtime_telemetry config.
instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java17RuntimeMetricsAutoConfiguration.java Same as Java8 variant: remove legacy mode parsing and use new defaultEnabled boolean contract.
instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/EarlyConfig.java Implement Spring starter distribution-based enable/disable (lists + default_enabled) with Binder list binding.
instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java Change configure signature to accept boolean defaultEnabled instead of instrumentationMode string.
instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java Pass distribution default enablement into runtime metrics config util.
instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java Same signature change: boolean defaultEnabled.
instrumentation/runtime-telemetry/runtime-telemetry-java17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java17/Java17RuntimeMetricsInstaller.java Pass distribution default enablement into runtime metrics config util.
instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java Switch enablement check to AgentDistributionConfig instead of declarative config + legacy mode.
declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java Remove tests that depended on legacy agent/mode mapping behavior.
declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java Remove tests for legacy agent prefix + instrumentation_mode string mapping.
declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java Adjust node traversal to use get() instead of getStructured(..., empty()).
declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java Remove special mappings for legacy agent/spring_starter instrumentation_mode and agent prefix translation.

Copy link
Copy Markdown
Member

@trask trask left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks @zeitlinger!

@trask trask merged commit 3c573ea into open-telemetry:main Feb 23, 2026
87 checks passed
@github-project-automation github-project-automation Bot moved this from Awaiting Review to Done in Declarative Configuration: Java Feb 23, 2026
@zeitlinger zeitlinger deleted the distribution-node branch February 24, 2026 05:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test native This label can be applied to PRs to trigger them to run native tests

Projects

Development

Successfully merging this pull request may close these issues.

move module enabled to "agent" in declarative config

4 participants